package Vista;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import Dominio.Dom_Fachada;
import Dominio.DominioException;
import Dominio.PerfilData;
import Dominio.UserData;

import com.opensymphony.xwork2.ActionSupport;

public class Registrar extends ActionSupport {
	private static final long serialVersionUID = 1L;

	// User data
	private String nif; // 8 dig
	private String cuentaBancaria;
	private String nick;
	private String pass;
	private String name;
	private String surname1;
	private String surname2;
	private String direccion;
	private String fechaNacimiento;
	private String correoElectronico;

	public String execute() {
		try {
			PerfilData user = new PerfilData(
					new UserData(Integer.parseInt(nif), name, surname1,
							surname2, nick, pass), direccion,
					correoElectronico, Long.parseLong(cuentaBancaria),
					fechaNacimiento);
			new Dom_Fachada().createCliente(user);
			return SUCCESS;
		} catch (DominioException d) {
			addFieldError("nif", "Datos existentes.");
			return INPUT;
		} catch (Exception e) {
			addFieldError("nif", "Datos existentes.");
			return INPUT;
		}
	}

	public void validate() {
		if (getNif().length() == 0) {
			addFieldError("nif", "El NIF del usuario es un campo obligatorio.");
		} else if (getNif().length() != 8) {
			addFieldError("nif", "El NIF introducido es inv�lido.");
		}
		if (getNick().length() == 0) {
			addFieldError("nick", "El nick es un campo obligatorio.");
		}
		if (getPass().length() == 0) {
			addFieldError("pass",
					"Es necesaria una contrase�a para la cuenta.");
		}
		if (getName().length() == 0) {
			addFieldError("name",
					"El nombre de usuario es un campo obligatorio.");
		}
		if (getSurname1().length() == 0) {
			addFieldError("surname1",
					"El primer apellido es un campo obligatorio.");
		}
		if (getSurname2().length() == 0) {
			addFieldError("surname2",
					"El segundo apellido es un campo obligatorio.");
		}
		if (getFechaNacimiento().length() == 0) {
			addFieldError("fechaNacimiento", "El  es un campo obligatorio.");
		} else {
			@SuppressWarnings("unused")
			Date date;
			try {
				date = new SimpleDateFormat("yyyy-MM-dd")
						.parse(getFechaNacimiento());
			} catch (ParseException e) {
				addFieldError("fechaNacimiento",
						"El formato de fecha es incorrecto.");
			}
		}
		if (getCuentaBancaria().length() == 0) {
			addFieldError("cuentaBancaria",
					"Debe indicarse un n�mero de cuenta bancario.");
		} else if (getCuentaBancaria().length() != 10) {
			addFieldError("cuentaBancaria",
					"El n�mero de cuenta bancario debe tener un formato v�lido.");
		}
		if (getDireccion().length() == 0) {
			addFieldError("direccion",
					"La direcci�n del domicilio es un campo obligatorio.");
		}
		if (getCorreoElectronico().length() == 0) {
			addFieldError("correoElectronico",
					"El correo electr�nico es un campo obligatorio.");
		}
	}

	public String getNif() {
		return nif;
	}

	public void setNif(String nif) {
		this.nif = nif;
	}

	public String getCuentaBancaria() {
		return cuentaBancaria;
	}

	public void setCuentaBancaria(String cb) {
		cuentaBancaria = cb;
	}

	public String getNick() {
		return nick;
	}

	public void setNick(String nick) {
		this.nick = nick;
	}

	public String getPass() {
		return pass;
	}

	public void setPass(String pass) {
		this.pass = pass;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSurname1() {
		return surname1;
	}

	public void setSurname1(String surname1) {
		this.surname1 = surname1;
	}

	public String getSurname2() {
		return surname2;
	}

	public void setSurname2(String surname2) {
		this.surname2 = surname2;
	}

	public String getDireccion() {
		return direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	public String getFechaNacimiento() {
		return fechaNacimiento;
	}

	public void setFechaNacimiento(String fechanacimiento) {
		this.fechaNacimiento = fechanacimiento;
	}

	public String getCorreoElectronico() {
		return correoElectronico;
	}

	public void setCorreoElectronico(String correoElectronico) {
		this.correoElectronico = correoElectronico;
	}

}
